package xyz.zhno.mall.common.core.util;

import cn.hutool.core.util.ArrayUtil;

import java.util.*;

/**
 * 集合工具类
 * @author zh_o
 */
public class CollUtils {

    /**
     * 判断集合是否为空
     */
    public static boolean isEmpty(Collection<?> collection) {
        return collection == null || collection.isEmpty();
    }

    /**
     * Map是否为空
     */
    public static boolean isEmpty(Map<?, ?> map) {
        return map == null || map.isEmpty();
    }

    /**
     * 判断集合是否不为空
     */
    public static boolean isNotEmpty(Collection<?> collection) {
        return !isEmpty(collection);
    }

    /**
     * Map是否不为空
     */
    public static boolean isNotEmpty(Map<?, ?> map) {
        return !isEmpty(map);
    }

    /**
     * 创建ArrayList
     */
    public static <T> ArrayList<T> newArrayList() {
        return (ArrayList<T>) getList(false);
    }

    /**
     * 创建ArrayList
     */
    public static <T> ArrayList<T> newArrayList(T ... values) {
        return (ArrayList<T>) getList(false, values);
    }

    /**
     * 创建LinkedList
     */
    public static <T> LinkedList<T> newLinkedList() {
        return (LinkedList<T>) getList(true);
    }

    /**
     * 创建LinkedList
     */
    public static <T> LinkedList<T> newLinkedList(T ... values) {
        return (LinkedList<T>) getList(true, values);
    }

    private static <T> List<T> getList(boolean isLinked, T ... values) {
        if (ArrayUtil.isEmpty(values)) {
            return getList(isLinked);
        }
        final List<T> list = isLinked ? new LinkedList<>() : new ArrayList<>();
        Collections.addAll(list, values);
        return list;
    }

    private static <T> List<T> getList(boolean isLinked) {
        return isLinked ? new LinkedList<>() : new ArrayList<>();
    }

}
